<!DOCTYPE html>
<html lang='en'>

<head>
  <meta charset='UTF-8'>
  <meta http-equiv='X-UA-Compatible' content='IE=edge'>
  <meta name='viewport' content='width=device-width, initial-scale=1.0'>
  <script src='../giteeApi.js'></script>
  <title>Document</title>
</head>

<body>
  <input type="file" id="fileInput">
  <button id="uploadButton">Upload</button>

  <script>

    // 将文件转换成base64,并包含数据URL的字符串（以data:开头的字符串）
    function readAsDataURL(file, callback) {
      if (!(file instanceof Blob && typeof FileReader !== 'undefined')) {
        return (callback(new Error('The File APIs are not fully supported in this browser.')));
      }
      const reader = new FileReader();
      // readAsDataURL方法通常用于图片或二进制数据，它会返回一个包含数据URL的字符串（以data:开头的字符串），该字符串包含了文件的MIME类型和Base64编码的文件内容。
      reader.readAsDataURL(file);
      reader.onload = function () {
        callback(null, reader.result);
      };
      reader.onerror = function (error) {
        callback(error);
      };
    }

    // 将文件转换成base64,不包含数据URL的字符串,既是没有以data:开头的字符串
    function readAsArrayBuffer(file, callback) {
      var reader = new FileReader();
      // 使用readAsArrayBuffer来读取文件  
      // 如果您只关心文件的Base64编码内容而不关心MIME类型，那么您应该使用readAsArrayBuffer方法，然后将ArrayBuffer转换为Base64字符串
      reader.readAsArrayBuffer(file);
      reader.onload = function (e) {
        var arrayBuffer = e.target.result;
        var base64 = arrayBufferToBase64(arrayBuffer);
        console.log(base64);
        callback(null, base64);
      };
      // 辅助函数，将ArrayBuffer转换为Base64字符串  
      function arrayBufferToBase64(buffer) {
        var binary = '';
        var bytes = new Uint8Array(buffer);
        var len = bytes.byteLength;
        for (var i = 0; i < len; i++) {
          binary += String.fromCharCode(bytes[i]);
        }
        return window.btoa(binary);
      }
    }

    // 将字符串转换为Base64编码非常简单
    function stringToBase64(str) {
      // 使用TextEncoder将字符串转换为Uint8Array  
      const encoder = new TextEncoder();
      const uint8Array = encoder.encode(str);
      // 将Uint8Array转换为二进制字符串  
      let binaryString = '';
      for (let i = 0; i < uint8Array.length; i++) {
        binaryString += String.fromCharCode(uint8Array[i]);
      }
      // 使用btoa进行Base64编码  
      return window.btoa(binaryString);
    }

    // geteeApi.Config.confit('xxx', 'xxx', 'xxx');
    
    // geteeApi.Repositories.contents()
    // geteeApi.Repositories.contents({ path:'ttt.txt'})
    //   .then(function ({ data }) { console.log(data); })
    //   .catch(function (error) { console.log(error); });

    // 创建一个图片文件
    // document.getElementById('uploadButton').addEventListener('click', function () {
    //   var fileInput = document.getElementById('fileInput');
    //   var file = fileInput.files[0]; // 获取用户选择的第一个文件  
    //   if (file) {
    //     readAsArrayBuffer(file, function (err, base64Img) {
    //       if (err) { console.error(err); return; }
    //       geteeApi.Repositories.newFile({
    //         path: 'ok.png',
    //         content: base64Img,
    //         message: "new a ok.png file!!"
    //       })
    //         .then(function ({ data }) { console.log(data); })
    //         .catch(function (error) { console.log(error); });
    //     })
    //   }
    // });

    // 创建一个文本文件
    geteeApi.Repositories.newFile({
      path: '中文.txt',
      // path: 'doc1/newfile2.js',
      // 需要将内容转换成base64
      // decodeURIComponent , encodeURIComponent
      // content: btoa(encodeURIComponent('这是个中文的语言,希望不会乱码')),
      content: stringToBase64('这是个中文的语言,希望不会乱码'),
      message: "commit to gitee"
    })
      .then(function ({ data }) { console.log(data); })
      .catch(function (error) { console.log(error); });

    // geteeApi.Repositories.readme({})
    // .then(function ({ data }) { console.log(data); })
    // .catch(function (error) { console.log(error); });

    // geteeApi.Repositories.updateFile({
    //   path: 'okok11.js',
    //   sha: '2064547a7354c942deeeba18ff4e3eaa30bccd4b',
    //   // 需要将内容转换成base64
    //   content: btoa('this is a new content to okok11.js'),
    //   message: "update a okok11.js file!!"
    // })
    //   .then(function ({ data }) { console.log(data); })
    //   .catch(function (error) { console.log(error); });

    // geteeApi.Repositories.deleteFile({
    //   path: 'test.js',
    //   sha: '501656cdc3f6a980069d6e12d5e52ec099d7c924',
    //   message: "deleteFile a file!!"
    // })
    //   .then(function ({ data }) { console.log(data); })
    //   .catch(function (error) { console.log(error); });

  </script>
</body>

</html>